/**
 * 表单相关操作
 */
class FormUtils {
    
    /** 校验用户名正则表达式 */
    static PATTERN_USERNAME = /^[\w\u4e00-\u9fa5]{2,6}$/;
    /** 校验密码的正则表达式 */
    static PATTERN_PASSWORD = /^\w{5,12}$/;
    /** 校验邮箱的正则表达式 */
    static PATTERN_EMAIL = /^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/;
    
    /**
     * 校验用户名
     * @param {string} username 用户名
     * @returns {{ verified: boolean, message: string }} { verified: 是否校验通过, message: 校验结果信息 }
     */
    static verifyUsername(username = '') {
        username = username.trim();
        if (username.length === 0) {
            return { verified: false, message: '用户名不能为空！' };
        }
        if (!FormUtils.PATTERN_USERNAME.test(username)) {
            return { verified: false, message: '用户名不合法！' };
        }
        return { verified: true, message: '校验通过' };
    }
    
    /**
     * 校验密码
     * @param {string} password 密码
     * @returns {{ verified: boolean, message: string }} { verified: 是否校验通过, message: 校验结果信息 }
     */
    static verifyPassword(password = '') {
		password = password.trim();
        if (password.length === 0) {
            return { verified: false, message: '密码不能为空！' };
        } 
        if (!FormUtils.PATTERN_PASSWORD.test(password)) {
            return { verified: false, message: '密码不合法！' };
        }
        return { verified: true, message: '校验通过' };
    }

    /**
     * 校验邮箱
     * @param {string} email 邮箱
     * @returns {{ verified: boolean, message: string }} { verified: 是否校验通过, message: 校验结果信息 }
     */
    static verifyEmail(email = '') {
        email = email.trim();
        if (email.length === 0) {
            return { verified: false, message: '邮箱不能为空！' };
        } else if (!FormUtils.PATTERN_EMAIL.test(email)) {
            return { verified: false, message: '邮箱不合法！' };
        }
        return { verified: true, message: '校验通过' };
    }

    /**
     * 校验验证码
     * @param {string} code 验证码
     * @returns {{ verified: boolean, message: string }} { verified: 是否校验通过, message: 校验结果信息 }
     */
    static verifyCode(code = '') {
        code = code.trim();
        if (code.length === 0) {
            return { verified: false, message: '验证码不能为空！' };
        }
        return { verified: true, message: '校验通过' };
    }
	
	/**
	 * 图片选择框初始化（绑定load、error事件）
	 */
	static imageInputInit() {
		const img = document.querySelector('.file img');
		document.querySelector('input[type="file"]').addEventListener('change', function() {
			if (this.files[0]) {
				img.setAttribute('src', URL.createObjectURL(this.files[0]));
			}
		});
		img.addEventListener('error', function() {
			this.classList.add('hide');
		});
		img.addEventListener('load', function() {
			this.classList.remove('hide');
		});
	}
	
	/**
	 * 验证码图片点击切换功能（点击事件）
	 */
	static listenerCodeClick() {
		const codeImage = document.querySelector('.captcha img');
		if (!codeImage) return;
		codeImage.addEventListener('click', function() {
			this.setAttribute('src', 'kaptcha#' + Date.now());
		});
	}
	
	/**
	 * 初始化表单左边的label宽度，保证输入框对齐
	 * @param {HTMLFormElement} form
	 */
	static initLabelWidth(form) {
		const labels = form.querySelectorAll('label.text-right');
		let maxWidth = 0;
		labels.forEach(label => {
			if (maxWidth < label.offsetWidth) {
				maxWidth = label.offsetWidth;
			}
		});
		labels.forEach(label => label.style.width = maxWidth + 'px');
	}
}